package com.reactim.message.dto;

import lombok.Data;
import lombok.Builder;
import java.util.List;

/**
 * 批量消息响应
 */
@Data
@Builder
public class BatchMessageResponse {
    
    /**
     * 批处理ID
     */
    private String batchId;
    
    /**
     * 总消息数量
     */
    private Integer totalCount;
    
    /**
     * 成功数量
     */
    private Integer successCount;
    
    /**
     * 失败数量
     */
    private Integer failureCount;
    
    /**
     * 成功的消息响应列表
     */
    private List<MessageResponse> successMessages;
    
    /**
     * 失败的消息信息列表
     */
    private List<FailedMessage> failedMessages;
    
    /**
     * 批处理耗时（毫秒）
     */
    private Long processingTimeMs;
    
    /**
     * 批处理状态
     */
    private BatchStatus status;
    
    /**
     * 失败的消息信息
     */
    @Data
    @Builder
    public static class FailedMessage {
        /**
         * 原始请求索引
         */
        private Integer requestIndex;
        
        /**
         * 失败原因
         */
        private String errorMessage;
        
        /**
         * 错误代码
         */
        private String errorCode;
        
        /**
         * 原始请求
         */
        private SendMessageRequest originalRequest;
    }
    
    /**
     * 批处理状态
     */
    public enum BatchStatus {
        /**
         * 全部成功
         */
        ALL_SUCCESS,
        
        /**
         * 部分成功
         */
        PARTIAL_SUCCESS,
        
        /**
         * 全部失败
         */
        ALL_FAILED,
        
        /**
         * 处理中
         */
        PROCESSING,
        
        /**
         * 已取消
         */
        CANCELLED
    }
}